'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：team_list.py
#日期：2018-05-06
#备注：本文主要介绍了python中元组、列表和字典的相关知识，元组是不可以更改的，列表和字典是可以更改的。     
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

from collections import Counter   #引入Counter
import json

# 元组的相关信息
def tuple_info():
    x1 = (5, 6, 2, 6)
    x = 5, 6, 2, 6     # 或者这样写

    # 不管是元组还是列表，访问元素都是从0这个索引开始的
    print(x[0])
    print(x1[1])


# 2.列表相关信息，相当于java中的数组
def list_info():
    y = [5, 6, 2, 6]
    y1 = [1,1]
    print(y[0])

    for bian_li in y:
        print(bian_li)

    for fanxiang_bian_li in reversed(y):           # 反向遍历一维列表所有数据
        print(fanxiang_bian_li)

    for fanxiang_bian_li2 in y[::-1]:           # 反向遍历一维列表所有数据
        print(fanxiang_bian_li2)

    y.append(2)
    print("append()方法，就是在列表尾部添加元素：", y)
    y.insert(2, 99)
    print("insert()方法，在列表索引2位置即第三个位置添加元素：", y)
    y.pop()
    print("pop()方法，在列表删除最后一个元素：", y)
    y.remove(2)
    print("remove(数值)方法，在列表删除元素，如果有多个相同数值，默认删除第一个：", y)
    y.remove(y[1])
    print("remove(索引)方法，在列表删除索引元素，第一个：", y)
    y.reverse()
    print("reverse()方法，对列表元素进行翻转：", y)
    y.extend(y1)
    print("extend(列表)方法，对y1列表合并到y：", y)
    y.clear()
    print("clear()方法，列表元素清除：", y)

    z = [5, 6, 2, 6]
    print("查找列表某个元素出现的次数：", z.count(6))
    print("从左边索引到右边索引但是不包括右边索引，即第1个到第4个：", z[0:4])
    print("倒数第一个数字，-2代表倒数第二：", z[-1])
    print("查找列表某个元素的索引，如果有多个值，默认找第一个元素，如果找不到元素就报错:", z.index(6))
    z.sort()                                    # reverse = True 降序,reverse = False 升序（默认）
    print("sort()方法，元素值从小到大排序：", z)

    # 判断列表是否有重复元素，先转化为集合类型去除重复数据，再对比列表和集合的长度
    if len(z)!=len(set(z)):
        print("列表Z含有重复元素")
        print("去除列表重复元素得到集合set(z)：",type(set(z)))
        print('集合set类型：', set(z))
        b = dict(Counter(z))
        print('列表每个元素的个数统计：',b)
        print({key: value for key, value in b.items() if value > 1})  # 展现重复元素和重复次数
    else:
        print("列表Z不含有重复元素")

    # 判断列表是否包含或者不包含某个元素
    if 5 in z:
        print("列表中包含元素5")
    if 7 not in z:
        print("列表中不包含元素7")

    # 二维列表
    x2 = [[5, 6], [6, 7], [7, 2], [2, 5], [4, 9]]
    print("二维列表第一个子列表：[5,6]>>>", x2[0])
    print("二维列表第一个子列表中第二值：6>>>", x2[0][1])

    # 三维列表
    x3 = [[[5, 7], [6, 6]], [[6, 6], [7, 8]], [7, 2], [2, 5]]
    # 相当于
    y3 = [
        [[5, 7], [6, 6]],
        [[6, 6], [7, 8]],
        [7, 2],
        [2, 5]
    ]
    print("3维列表第2个二维列表中第1个子列表第1个值：6>>>", x3[1][0][0])
    print("3维列表第4个子列表第1个值：2>>>", y3[3][0])
    # 如果print(y3[3][0][0])报错，因为3维列表第4个是一维列表

    # 对二维空列表赋值
    list = []
    f = 100
    for i in range(1,8):
        row = []
        for j in range(1):
            row.append(i)
            row.append(f)
            f =f +1
        list.append(row)
    print("二维列表赋值：",list)

    # 遍历二维列表
    for i in range(len(list)):
        print(list[i][0])
        print(list[i][1])


def dict_info():
    dict_list ={
        'base_resp': {
            'ret': 0,
            'errmsg': 'ok'
        },
        'enabled': 1,
        'elected_comment': [{
            'id': 1,
            'nick_name': '十语荐书',
            'content': '今日得到：',
            'create_time': 1544136635,
            'content_id': '344222885537120675',
            'like_num': 108,
            'is_from_friend': 0,
            'reply': {
                'reply_list': []
            },
        }],
        'friend_comment': [],
        'elected_comment_total_cnt': 14,
        'only_fans_can_comment': False
    }

    print("dict_list为字典类型：", type(dict_list))
    print("获取字典里面的value值（值）：",dict_list['base_resp']['errmsg'])
    elected_comment = dict_list['elected_comment']
    print("获取字典里面的value值(列表)：",elected_comment)
    for comment in elected_comment:
        print("另外一种获取字典里面的value值（值）：",comment.get('content_id'))

    # 1.遍历字典key值，value值：一般为字符串，如果字典为复杂情况， 这个时候会出现字符串，列表等类型
    for key in dict_list:
        print("遍历字典key+value值1：", key, dict_list[key])

    for key in dict_list.keys():
        print("遍历字典key+value值2：", key, dict_list[key])

    for value in dict_list:
        print("遍历字典key+value值3：", value, dict_list[value])

    for key, value in dict_list.items():
        print("遍历字典key+value值4：", key, value)

    for (key, value) in dict_list.items():
        print("遍历字典key+value值5：", key, value)

    # 2.遍历字典项，得到的是元组类型
    print(dict_list.items())
    print("dict_list.items()为dict_items类型:", type(dict_list.items()))
    for item in dict_list.items():
        print("遍历字典项得元组：", item)
        print("这里的item为元组类型：", type(item))


    # dict转换json格式（str）
    # indent：缩进空格式; sort_keys=True：排序，默认不排序; ensure_ascii：默认输出为ASCII字符，False可以输出中文;
    # separators 去掉‘,’ ‘:’后面的空格; skipkeys：可以跳过那些非string对象当作key的处理
    dict_json = json.dumps(dict_list, indent=4, ensure_ascii=False, sort_keys=True, separators=(',', ':'),skipkeys=True)
    print("dict_json为str类型：", type(dict_json), dict_json)

    back_list = {value: key for key, value in dict_list.items()}
    print("dict的key和values值反转：", back_list)

if __name__ == '__main__':
    #tuple_info()
    list_info()
    #dict_info()
